package com.zxl.study.confusion.v4;

import com.zxl.study.confusion.OrderDetailModel;
import com.zxl.study.confusion.OrderMainModel;

import java.util.List;

/**
 * @auther zxl
 * @create 2023-08-13 15:36
 * 需要客户审核的业务处理 的职责对象
 */
public class NeedCustomrAuditHandler extends SaveOrderHandler {
    @Override
    public void handleRequest(SaveOrderRequestModel saveOrderRequestModel) {
        //处理自己的业务

        if(saveOrderRequestModel.isOrderNeedAudit()) {
            //4：如果需要客户审核
//        this.needCustomerAudit();
            System.out.println("NeedCustomrAuditHandler=========>");
        }

        //最后一步，调用父类的方法，向后传递请求对象
        super.handleRequest(saveOrderRequestModel);
    }

    /**
     * 如果需要客户审核，要完成的业务功能
     * @param orderMainModel 订单主记录的model对象
     * @param orderDetailModelList 订单明细记录的list
     */
    //组合方法
    private void needCustomerAudit(OrderMainModel orderMainModel, List<OrderDetailModel> orderDetailModelList){
        //4.1：设置订单状态为待客户审核
//        this.setOrderState(orderMainModel.getUuid(),2);

        //4.2：自动生成相应的采购审核单
//        this.genOrderAuditSheet(orderMainModel,orderDetailModelList);

        //4.3：记录订单的操作日志
//        this.needCustomerAuditOrderLog(orderMainModel,orderDetailModelList);
        //此时认为订单并未下单完全成功，所以不用发出事件
        //后续的业务，要等用户审核完成后，回调订单提供的方法，再进行后续的业务操作
    }

    /**
     * 设置订单状态为待客户审核
     * @param orderMainUuid
     * @param orderState
     */
    //功能方法
    private void setOrderState(Long orderMainUuid,int orderState){
        //先做数据校验，要把状态改成传入的新的状态，可能需要有一些业务前置要求
        //检查是否能够满足这个业务要求
        //比如；要把状态改成待客户审核，要求订单状态必须是 新保存的订单

        //真正来修改状态
    }

    /**
     * 生成相应的采购审核单
     * @param orderMainModel
     * @param orderDetailModelList
     */
    //功能方法
    private void genOrderAuditSheet(OrderMainModel orderMainModel, List<OrderDetailModel> orderDetailModelList){
        //数据组织
        //调用：CustomerCenter4OrderApi.genOrderAuditSheet
    }

    /**
     * 需要客户审核的时候，记录订单的操作日志
     * @param orderMainModel
     * @param orderDetailModelList
     */
    //功能方法
    private void needCustomerAuditOrderLog(OrderMainModel orderMainModel,List<OrderDetailModel> orderDetailModelList){
        //4.3：记录订单的操作日志
    }
}

